package com.escargear39.activity;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import android.app.Activity;
import android.content.ContentValues;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import com.escargear39.util.DatabaseHelper;

public class BookofFriendsActivity extends Activity implements OnItemClickListener, OnClickListener {
    // データベースヘルパーの作成
    private DatabaseHelper dbHelper = new DatabaseHelper(this);
    // データベースの宣言
    public static SQLiteDatabase db;
    // ソート順のキー
    private String sortBy;
    // DBカラム名
    private String FRIENDS_ID;
    private String FRIENDS_FAMILY_NAME;
    private String FRIENDS_FIRST_NAME;
    // DB取得結果
    HashMap<Integer, HashMap<String, String>> data;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.main);

        // set click listener to ADD(追加) button
        View addButton = findViewById(R.id.add_button);
        addButton.setOnClickListener(this);

        // データベースをオープン
        db = dbHelper.getWritableDatabase();

        // ダミーデータインサート部分
        ContentValues values = new ContentValues();
        values.put(getResources().getString(R.string.FRIENDS_ID), 1);
        values.put(getResources().getString(R.string.FRIENDS_FAMILY_NAME), "山田");
        values.put(getResources().getString(R.string.FRIENDS_FAMILY_NAME_READING), "ヤマダ");
        values.put(getResources().getString(R.string.FRIENDS_FIRST_NAME), "太郎");
        values.put(getResources().getString(R.string.FRIENDS_FIRST_NAME_READING), "タロウ");
        values.put(getResources().getString(R.string.FRIENDS_PICTURE), " ");
        values.put(getResources().getString(R.string.FRIENDS_NICKNAME), "やまだ");
        values.put(getResources().getString(R.string.FRIENDS_COUNTRY_OF_ORIGIN), "日本");
        values.put(getResources().getString(R.string.FRIENDS_BIRTHDAY), "1982/02/09");
        values.put(getResources().getString(R.string.FRIENDS_ADDRESS), "東京都新宿区");
        values.put(getResources().getString(R.string.FRIENDS_PHONE_NUMBER), "090-1234-1234");
        values.put(getResources().getString(R.string.FRIENDS_MAIL_ADDRESS1), "test@test.co.jp");
        values.put(getResources().getString(R.string.FRIENDS_MAIL_ADDRESS2), "");
        values.put(getResources().getString(R.string.FRIENDS_ORGANIZATION), "");
        values.put(getResources().getString(R.string.FRIENDS_MET_DATE), "2012/06/01");
        values.put(getResources().getString(R.string.FRIENDS_MET_LOCATION), "飯塚");
        values.put(getResources().getString(R.string.FRIENDS_CREATE_DATE), "2012/06/01");
        values.put(getResources().getString(R.string.FRIENDS_UPDATE_DATE), "");

        db.beginTransaction();
        db.insert(getResources().getString(R.string.TABLE_FRIENDS), null, values);
        db.setTransactionSuccessful();
        db.endTransaction();
        // ダミーデータインサート部分ここまで

        // DBカラム名を定数XMLから取得しとく
        FRIENDS_ID = getResources().getString(R.string.FRIENDS_ID);
        FRIENDS_FAMILY_NAME = getResources().getString(R.string.FRIENDS_FAMILY_NAME);
        FRIENDS_FIRST_NAME = getResources().getString(R.string.FRIENDS_FIRST_NAME);

        // ソート順
        // TODO 前回のソート順をSharedPreferenceもしくはDBから取得するようにする
        sortBy = FRIENDS_ID;

        // 一覧情報を取得
        data = dbHelper.getList(db, sortBy);

        // close the database
        dbHelper.close();

        // 描画
        draw();

    }

    /**
     * 画面の描画を行う
     */
    public void draw() {
    	// 画面に表示する名前の一覧を格納するリスト変数
        List<String> nameList = new ArrayList<String>();
        // 氏名を連結してリストに格納するための変数
        String conName;
        // DBから取得したdataから名字と名前を取得するための変数
        String familyName;
        String firstName;
        
        // DBから取得した名前をリストに格納
        for (int i = 0; i < data.size(); i++) {
            familyName = data.get(i).get(FRIENDS_FAMILY_NAME);
            firstName = data.get(i).get(FRIENDS_FIRST_NAME);
            conName = familyName + " " + firstName;
            nameList.add(conName);
        }
        
        // ListView(スクロール可能なリスト)に名前の入ったリストを渡して画面を作る
        ListView friendsView = (ListView) findViewById(R.id.friends_listview);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.friend_row, nameList);
        friendsView.setAdapter(adapter);
        // 初期フォーカス位置を指定
        friendsView.setSelection(0);
        // Viewにクリックリスナーをセット
        friendsView.setOnItemClickListener(this);
    }

    /**
     * called when the application close
     */
    @Override
    public void onDestroy() {
        super.onDestroy();
    }

    /**
     * called when a row is clicked
     */
    public void onItemClick(AdapterView<?> adapter, View view, int position, long id) {
    	// インテントにFRIENDS_IDを詰めてInformationActivityを呼び出す
        Intent infoIntent = new Intent(BookofFriendsActivity.this, InformationActivity.class);
        infoIntent.putExtra(FRIENDS_ID, data.get(position).get(FRIENDS_ID));
        startActivity(infoIntent);
    }

    /**
     * called when button(s) is clicked
     */
	@Override
	public void onClick(View v) {
		// switch by id
        switch (v.getId()) {
        case R.id.add_button:
        	// インテントに何も詰めずにEditFriendsActivityを呼び出す
        	// もしかしたら明示的にFRIENDS_IDへnullを詰める必要があるかもしれない
        	Intent i = new Intent(BookofFriendsActivity.this, EditFriendsActivity.class);
        	startActivity(i);
        	break;
        }
	}
}